<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>内存溢出与内存泄露</title>
    <script>
        /**
         * 内存泄漏正常情况下不会导致报错，长时间积累容易导致内存溢出
         * 解决：1能不用闭包就不用。2及时释放。
         */
        
        /**
         * 函数执行后，函数内部的局部变量没有释放，占用内存的时间会变长，容易导致内存泄漏
         */
        function fn1() {
            var arr = new Array(100000)
            function fn2() {
                console.log(arr.length)
            }
            return fn2
        }
        
        var f = fn1()
        f()
        
        
        
        /**
         * 以外的全局变量导致内存泄漏
         */
        function f1() {
            a = 100;//a 被当作全局变量
            console.log(a)
        }
        f1()
        
        ///启动循环定时器，不关闭，会导致内存泄露
        var id = setInterval(function () {
            console.log('setInterval')
        },1000)
        
        // 销毁循环定时器，防止内存泄漏
        clearInterval(id)
        
        
        /**
         * 内存溢出：一种程序运行时出现的错误，程序运行需要的内存超过了剩余的内存，就会抛出内存溢出的错误
         */
        function fun() {
            var obj = {}
            for (var i=0; i<100000; i++) {
                // 伪数组
                obj[i] = new Array(100000)
            } 
        }
        //fun() //oom
        
        
        
    </script>
</head>
<body>

</body>
</html>
